// 文件路径: src/com/warmup/main/StudentManager.java
package code;
import code.Student;
import java.util.Scanner;
import java.util.InputMismatchException;

public class StudentManager {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 1. 定义存储3个学生的数组
        Student[] students = new Student[3];

        System.out.println("--- 请输入3名学生的信息 ---");

        // 2. 循环接收输入，添加输入验证和异常处理
        for (int i = 0; i < students.length; ) {
            try {
                System.out.println("\n请输入第 " + (i + 1) + " 名学生的信息:");

                // 学号输入及验证（非空+唯一）
                String id;
                while (true) {
                    System.out.print("学号: ");
                    id = scanner.nextLine().trim();
                    if (id.isEmpty()) {
                        System.out.println("错误：学号不能为空，请重新输入！");
                        continue;
                    }
                    // 检查学号是否已存在
                    if (isIdExists(students, id, i)) {
                        System.out.println("错误：该学号已存在，请重新输入！");
                    } else {
                        break; // 学号合法，退出循环
                    }
                }

                // 姓名输入及验证（非空）
                String name;
                do {
                    System.out.print("姓名: ");
                    name = scanner.nextLine().trim();
                    if (name.isEmpty()) {
                        System.out.println("错误：姓名不能为空，请重新输入！");
                    }
                } while (name.isEmpty());

                // 年龄输入及验证（合理范围）
                int age;
                while (true) {
                    System.out.print("年龄: ");
                    age = scanner.nextInt();
                    if (age < 5 || age > 100) { // 学生年龄合理范围
                        System.out.println("错误：年龄需在5-100之间，请重新输入！");
                        scanner.nextLine(); // 清空错误输入
                    } else {
                        scanner.nextLine(); // 消费换行符
                        break;
                    }
                }

                // 创建学生对象存入数组
                students[i] = new Student(id, name, age);
                i++; // 输入正确才递增索引
            } catch (InputMismatchException e) {
                System.out.println("错误：年龄必须是整数，请重新输入！");
                scanner.nextLine(); // 清空非整数输入
            }
        }

        // 3. 打印所有学生信息
        System.out.println("\n--- 所有学生信息如下 ---");
        for (int i = 0; i < students.length; i++) {
            System.out.printf("学生%d: %s%n", i + 1, students[i]);
        }

        // 单独打印第三名学生信息
        System.out.println("\n--- 第三名学生的信息 ---");
        System.out.println(students[2]);

        // 4. 验证equals和hashCode（修正描述，关联实际逻辑）
        System.out.println("\n--- equals 和 hashCode 验证 ---");
        // 使用用户输入的学生进行验证（更贴合实际场景）
        Student userStudent1 = students[0];
        Student userStudent2 = students[1];
        Student userStudent3 = students[2];

        // 测试1：比较用户输入的第一个和第二个学生
        System.out.printf("学生1与学生2是否相等（基于学号）: %b%n",
                userStudent1.equals(userStudent2));
        System.out.printf("学生1与学生2的hashCode是否相同: %b%n",
                userStudent1.hashCode() == userStudent2.hashCode());

        // 测试2：比较用户输入的第二个和第三个学生
        System.out.printf("学生2与学生3是否相等（基于学号）: %b%n",
                userStudent2.equals(userStudent3));
        System.out.printf("学生2与学生3的hashCode是否相同: %b%n",
                userStudent2.hashCode() == userStudent3.hashCode());

        scanner.close();
        System.out.println("\n程序执行完毕！");
    }

    // 辅助方法：检查学号是否已存在（避免重复）
    private static boolean isIdExists(Student[] students, String id, int currentIndex) {
        for (int j = 0; j < currentIndex; j++) {
            if (students[j] != null && students[j].getStudentId().equals(id)) {
                return true;
            }
        }
        return false;
    }
}
